/*
 * Fernanda Ibarrola - 0711920
 * Luiza Silva       - 0810905
 *
 */


#ifndef HEAP_H
#define HEAP_H

/* Declaracao do tipo heap */

typedef struct heap Heap;


void printHeap (Heap* h, int (*print)(void*));

/* Criar Heap: auto explicativo
	Nota: na heap, sao armazanados somente os
	ponteiros para os elementos.
	cmp e a funcao que sera usada para comparar
	os elementos na adicao de um elemento novo */ 

Heap* criarHeap (int (*cmp)(void*, void*));

/* Destruir heap: auto explicativo 
	Nota: os elementos apontados pelos nos da
	heap NAO sao desalocados, so a propria heap */

void destruirHeap (Heap* h);

/* Adicionar Elemento: auto explicativo */

void adicionarElemento (Heap* h, void* elementoNovo);  

/* Tirar Elemento: remove o elemento do topo da heap */

void tirarElemento (Heap* h);

/* Retorna Topo: retorna o ponteiro para o elemento do
	topo da heap */

void* retornaTopo (Heap* h);

/* Heap Vazia: retorna 1 se a heap estiver vazia,
	zero caso contrario */

int heapVazia (Heap* h);

/* Tamanho Heap: retorna o numero de elementos que
	existem na heap h */

int tamanhoHeap (Heap* h);

#endif /* HEAP_H */
